import request from "@/api/request.js";
const url = '/file'

const uploadUrl = url + '/upload'
// 文件上传并绑定数据
const uploadAndBindUrl = url + '/uploadAndBind'
const getFileByRelAndTypeUrl = url + '/getFileByRelAndType'
// 批量上传文件

const uploadsUrl = url + '/uploads'
const downloadZipUrl = url + '/downloadZip'

// 根绝业务id获取该业务关联的附件信息
const getFileUrl = url + '/getFile'
export default {
    uploadUrl,
    uploadsUrl,
    uploadAndBindUrl,
    getFileUrl,

    upload(params) {
        return request.uploadFile(uploadUrl, params, {
            headers: {
                hasFile: true
            }
        })
    },
    /**
     * 批量上传文件,这里似乎axios没有自动处理,因此手动处理
     * @param {Array} files 文件列表
     * @returns {Promise<AxiosResponse<any>> | Promise<axios.AxiosResponse<any>>}
     */
    uploads(files) {
        let formData = new FormData()
        for (let file of files) {
            formData.append('files', file)
        }
        return request.uploadFile(uploadsUrl, formData, {
            headers: {
                hasFile: true
            }
        })
    },
    /**
     *   // 批量下载
     * @param params
     * @param {Array} params.filePaths 文件路径
     * @returns {Promise<unknown>}
     */
    downloadZip(params) {
        return request.downloadFileStream(downloadZipUrl, params)
    },
    /**
     * 根据业务IDs以及业务类型获取文件
     * @param params
     * @param {Array} params.rels - 业务IDs
     * @param {String} params.type - 业务类型编码
     * @return {Promise<AxiosResponse<any>>}
     */
    getFileByRelAndType(params) {
        return request.httpGet(getFileByRelAndTypeUrl, params, {
            headers: {
                hasFile: true
            }
        })
    },
    /**
     * 上传文件并且绑定业务ID
     * @param params
     * @param {file} params.file - 文件
     * @param {string} params.relId - 业务ID
     * @param {string} params.relType -关联类型(每个业务都不同)
     * @param {number} params.showIndex -文件顺序
     * @returns {Promise<axios.AxiosResponse<any>> | Promise<AxiosResponse<any>>}
     */
    uploadAndBind(params){
        return request.httpPostForm(uploadAndBindUrl, params)
    },
}
